<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/602498 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="517"/>

<div>
<span><div><div>cs架构（客户端+服务器模式）</div><div>该结构需要处理的业务合理的分配到客户端和服务器端</div><div>客户端主要负责完成与用户的交互任务，服务器主要负责数据的管理</div><div>优点：</div><ol><li><div>响应速度比较快 因为是只有一层交互</div></li><li><div>应用服务器的符合较轻松</div></li><li><div>客户端的界面和功能可以很丰富</div></li></ol><div>缺点：</div><ol><li><div>适用面窄，用户群固定</div></li><li><div>维护和升级的成本高，所有的客户端都需要更新版本</div></li></ol><div><br/></div><div>bs架构（浏览器+服务器模式）（java程序员主要采用该结构进行开发）</div><div>该结构将系统功能实现的主要业务逻辑集中到服务器端，极少数业务逻辑在浏览器实现</div><div>浏览器主要负责完成与用户的交互任务，服务器主要负责数据的管理</div><div>b's架构优点：</div><ol><li><div>无需下载安装客户端，只要有浏览器即可</div></li><li><div>适用面广 用户群不固定</div></li><li><div>通过权限控制实现多客户访问的目的，交互性较强</div></li><li><div>维护和升级的成本较低，无需更新所有客户端版本</div></li></ol><div>缺点：</div><ol><li><div>应用服务器的负荷较重</div></li><li><div>浏览器的界面和功能想要达到客户端的丰富程度需要花费大量的成本</div></li><li><div>在跨浏览器上不尽如人意，适配比较麻烦</div></li></ol><div>Javaweb的概念：</div><div><br/></div><div>互联网上供外界访问的资源主要分为以下两种：</div><ol><li><div>静态资源：主要指Web页面中供人们浏览的数据始终是不变。</div></li><li><div>动态资源：主要指Web页面中供人们浏览的数据由程序产生，不同时间点访问页面看到的内 容各不相同。</div></li></ol><div>JavaWeb主要指使用Java语言进行动态Web资源开发技术的统称，是解决相关Web互联网领域的技 术总和。</div><div><br/></div><div><br/></div><div><br/></div><div>HTTP协议（ 超文本传输协议）：</div><ol><li><div>概念： 用来规范浏览器与Web服务器之间如何通讯的数据格式，主要涉及浏览器 的发请求格式和服务器的响应格式。</div></li><li><div>HTTP协议通常承载于TCP协议之上，而承载于TLS或SSL协议层之上的协议就是常说的HTTPS协 议。</div></li><li><div>HTTP默认的端口号为80，HTTPS默认的端口号为443。</div></li></ol><div>请求格式： 客户端发送一个HTTP请求到服务器的请求消息主要包括：请求行、请求头、空白行和请求体。</div><div>相应格式： 通常情况下服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息，主要包括：响 应行、响应头、空白行和响应体。</div><div><br/></div><div><span style="font-weight: bold;">Servlet（java servlet）的概念和使用</span></div><div><span style="font-weight: bold;">基本概念：</span></div><ol><li><div>，称为小服务程序或服务连接器，是Java语言编写 的服务器端程序，换句话说，Servlet就是运行在服务器上的Java类。</div></li><li><div>Servlet用来完成B/S架构下客户端请求的响应处理，也就是交互式地浏览和生成数据，生成动态 Web内容。</div></li></ol><div><span style="font-weight: bold;">变成步骤：</span></div><ol><li><div>建立一个Java Web Application项目并配置Tomcat服务器。</div></li><li><div>自定义类实现Servlet接口或继承 HttpServlet类（推荐） 并重写service方法。</div></li><li><div>将自定义类的信息配置到 web.xml文件并启动项目</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Servlet接口</span></div><div><span style="font-weight: bold;">概念：</span> <span style="font-weight: bold;">javax.servlet.Servlet接口用于定义所有servlet必须实现的方法。</span></div><div><br/></div><div><span style="font-weight: bold;">常用方法：</span></div><ol><li><div>void init(ServletConfig config)：  由servlet容器调用，以向servlet指示servlet正在 被放入服务中</div></li><li><div>void service(ServletRequest req, ServletResponse res)：    由servlet容器调用，以允许servlet响应请求</div></li><li><div>ServletConfig getServletConfig()：    返回ServletConfig对象，该对象包含此servlet的初 始化和启动参数</div></li><li><div>String getServletInfo()：    返回有关servlet的信息，如作者、版本和版权</div></li><li><div>void destroy()：    由servlet容器调用，以向servlet指示该servlet正 在退出服务</div></li></ol><div><br/></div><div><span style="font-weight: bold;">GenericServlet类</span></div><div><span style="font-weight: bold;">概念：</span></div><ol><li><div>javax.servlet.GenericServlet类主要用于定义一个通用的、与协议无关的servlet，该类实现了Servlet接口。</div></li><li><div>若编写通用servlet，只需重写service抽象方法即可。</div></li></ol><div><span style="font-weight: bold;">常用方法：</span></div><ol><li><div>abstract void service(ServletRequest req, ServletResponse res) ：    由servlet容器调用允许servlet响应请求</div></li></ol><div><br/></div><div><span style="font-weight: bold;">HTTPServlet类</span></div><div><span style="font-weight: bold;">概念：</span></div><ol><li><div>javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet类。</div></li><li><div>用于创建适用于网站的HTTP Servlet，该类的子类必须至少重写一个方法。</div></li></ol><div><span style="font-weight: bold;">常用方法</span>：</div><ol><li><div>void doGet(HttpServletRequest req, HttpServletResponse resp)：   处理客户端的GET请求</div></li><li><div>void doPost(HttpServletRequest req, HttpServletResponse resp)：   处理客户端的POST请求</div></li><li><div>void init()：    进行初始化操作</div></li><li><div>void service(HttpServletRequest req, HttpServletResponse resp)：    根据请求决定调用doGet还是 doPost方法</div></li><li><div>void destroy(）：    删除实例时释放资源</div></li></ol><div><span style="font-weight: bold;">Servlet 的生命周期：实例化-&gt;初始化-&gt;服务-&gt;销毁-&gt;不可用</span></div><div>实例化：Servlet容器创建Servlet的实例</div><div>初始化：该容器调用init()方法</div><div>服务：如果请求Servlet 则容器调用service（）方法</div><div>销毁：销毁实例之前调用destroy()方法</div><div>不可用：销毁实例并标记为垃圾收集</div><div><br/></div><div><span style="font-weight: bold;">注意：</span></div><ol><li><div><span style="font-weight: bold;">构造方法只被调用一次，当第一次请求Servlet时调用构造方法来创建Servlet的实例。</span></div></li><li><div><span style="font-weight: bold;">init方法只被调用一次，当创建好Servlet实例后立即调用该方法实现Servlet的初始化。</span></div></li><li><div><span style="font-weight: bold;">service方法被多次调用，每当有请求时都会调用service方法来用于请求的响应。</span></div></li><li><div><span style="font-weight: bold;">destroy方法只被调用一次，当该Servlet实例所在的Web应用被卸载前调用该方法来释放当前占用 的资源。</span></div></li></ol><div><br/></div><div><span style="font-weight: bold;">POST和GET请求</span></div><div><span style="font-weight: bold;">get请求：</span></div><div><span style="font-weight: bold;">发送get请求的主要方式:</span></div><ol><li><div>在浏览器输入URL按回车</div></li><li><div>点击超链接</div></li><li><div>点击submit按钮，提交&lt;form method=&quot;get&quot;&gt;表单</div></li></ol><div><span style="font-weight: bold;">get请求特点</span>： 会将请求数据添加到请求URL地址的后面，只能提交少量的数据、不安全</div><div><span style="font-weight: bold;">POST请求：</span></div><div><span style="font-weight: bold;">post请求方式：点击submit按钮，提交&lt;form method=&quot;get&quot;&gt;表单</span></div><div><span style="font-weight: bold;">post请求特点：</span> 请求数据添加到HTTP协议体中，可提交大量数据、安全性好</div><div><span style="font-weight: bold;">ServletRequest接口：</span></div><div><span style="font-weight: bold;">基本概念：</span></div><ol><li><div>javax.servlet.ServletRequest接口主要用于向servlet提供客户端请求信息，可以从中获取到任何 请求信息。</div></li><li><div>Servlet容器创建一个ServletRequest对象，并将其作为参数传递给Servlet的service方法。</div></li></ol><div><span style="font-weight: bold;">常用方法：</span></div><ol><li><div>String getParameter(String name)：    以字符串形式返回请求参数的值，如果该参数不存在，则返回空 值</div></li><li><div>String[] getParameterValues( String name)：    返回一个字符串对象数组，其中包含给定请求参数所具有的所有 值，如果该参数不存在，则返回空值</div></li><li><div>Enumeration getParameterNames()：    返回包含此请求中包含的参数名称的字符串对象的枚举。如果请 求没有参数，则方法返回空枚举</div></li><li><div>Map getParameterMap()：   返回请求参数的键值对，一个键可以对应多个值</div></li><li><div>String getRemoteAddr()：    返回发送请求的客户端或最后一个代理的IP地址</div></li><li><div>int getRemotePort()：    返回发送请求的客户端或最后一个代理的端口号</div></li></ol><div><br/></div><div><span style="font-weight: bold;">HttpServletRequest接口</span></div><div><span style="font-size: unset;"><span style="color: unset; font-family: unset; font-size: unset; font-weight: bold;">基本概念</span></span></div><ol><li><div>javax.servlet.http.HttpServletRequest接口是ServletRequest接口的子接口，主要用于提供HTTP 请求信息的功能。</div></li><li><div>不同于表单数据，在发送HTTP请求时，HTTP请求头直接由浏览器设置。</div></li><li><div>可直接通过HttpServletRequest对象提供的一系列get方法获取请求头数据。</div></li></ol><div><span style="font-weight: bold;">常用方法：</span></div><ol><li><div>String getRequestURI()：    返回此请求的资源路径信息</div></li><li><div>StringBuffer getRequestURL()：    返回此请求的完整路径信息</div></li><li><div>String getMethod()：    返回发出此请求的HTTP方法的名称，例如GET、POS</div></li><li><div>String getQueryString()：    返回路径后面请求中附带的参数</div></li><li><div>String getServletPath()：    返回此请求中调用servlet的路径部分</div></li></ol><div><span style="font-weight: bold;">ServletResponse接口</span></div><div><span style="font-weight: bold;">基本概念</span></div><ol><li><div>javax.servlet.ServletResponse接口用于定义一个对象来帮助Servlet向客户端发送响应</div></li><li><div>Servlet容器创建ServletResponse对象，并将其作为参数传递给servlet的service方法。</div></li></ol><div><span style="font-size: unset;"><span style="color: unset; font-family: unset; font-size: unset; font-weight: bold;">常用方法：</span></span></div><ol><li><div>PrintWriter getWriter()：    返回可向客户端发送字符文本的PrintWriter对象</div></li><li><div>String getCharacterEncoding()：    获取响应内容的编码方式</div></li><li><div>void setContentType(String type)：    如果尚未提交响应，则设置发送到客户端响应的内容类型。内容类型 可以包括字符编码规范，例如text/html;charset=UTF-8</div></li></ol><div><span style="font-size: unset;"><br/></span></div><div><span style="font-weight: bold;">HttpServletResponse接口</span></div><div><span style="font-weight: bold;">基本概念：</span> javax.servlet.http.HttpServletResponse接口继承ServletResponse接口，以便在发送响应时提供 特定于HTTP的功能。</div><div><span style="font-weight: bold;">常用方法：</span> void sendRedirect(String location)  :    使用指定的重定向位置URL向客户端发送临时重定向响应</div><div><span style="font-weight: bold;">Servlet接收中文乱码</span></div><div><span style="font-weight: bold;">乱码原因：</span> 浏览器在提交表单时，会对中文参数值进行自动编码。当Tomcat服务器接收到浏览器请求后自动 解码，当编码与解码方式不一致时,就会导致乱码。</div><div><br/></div><div><span style="font-weight: bold;">解决POST接收乱码：</span> 接收之前设置编码方式： request.setCharacterEncoding(“utf-8”) 提示： 必须在调用request.getParameter(“name”)之前设置</div><div><span style="font-weight: bold;">解决GET接收乱码：</span> 将接收到的中文乱码重新编码: // 接收到get请求的中文字符串 String name = request.getParameter(&quot;name&quot;); // 将中文字符重新编码，默认编码为ISO-8859-1 String userName = new String(name.getBytes(“ISO-8859-1”),“utf-8&quot;);</div><div><br/></div><div><span style="font-weight: bold;">ServletConfig接口</span></div><div><span style="font-weight: bold;">概念：</span> javax.servlet.ServletConfig接口用于描述Servlet本身的相关配置信息，在初始化期间用于将信息 传递给Servlet配置对象。</div><div>常用方法：</div><ol><li><div>String getServletName()     返回Servlet的别名</div></li><li><div>String getInitParameter(String name)     返回包含初始化参数值的字符串，如果该参数不存在，则返回null</div></li><li><div>Enumeration getInitParameterNames()     将servlet的初始化参数的名称作为字符串对象的枚举返回，如果 servlet没有初始化参数，则返回空枚举</div></li><li><div>ServletContext getServletContext()    返回对调用方正在其中执行的ServletContext的引用</div></li></ol><div><br/></div><div><span style="font-weight: bold;">ServletContext接口</span></div><div><span style="font-weight: bold;">概念：</span></div><ol><li><div>javax.servlet.ServletContext接口主要用于定义一组方法，Servlet使用这些方法与它的Servlet容 器通信。</div></li><li><div>服务器容器在启动时会为每个项目创建唯一的一个ServletContext对象，用于实现多个Servlet之间 的信息共享和通信。</div></li><li><div>在Servlet中通过this.getServletContext()方法可以获得ServletContext对象</div></li></ol><div>常用方法：</div><ol><li><div>String getInitParameter(String name)    返回包含初始化参数值的字符串，如果该参数不存在，则返回 null</div></li><li><div>Enumeration getInitParameterNames()     将servlet的初始化参数的名称作为字符串对象的枚举返回，如 果servlet没有初始化参数，则返回空枚举</div></li><li><div>String getRealPath(String path)     返回包含给定虚拟路径的实际路径的字符串</div></li><li><div>String getContextPath()     返回与此上下文关联的主路径</div></li><li><div>InputStream getResourceAsStream(String path)     将位于指定路径的资源作为InputStream对象返回</div></li><li><div>void setAttribute(String name, Object object)    将指定的属性名和属性值绑定到当前对象</div></li><li><div>Object getAttribute(String name)     根据执行的属性名获取属性值</div></li><li><div>void removeAttribute(String name)    删除指定的属性名信息</div></li></ol><div><br/></div><div><span style="font-size: unset;"><br/></span></div><div><span style="font-weight: bold;">Servlet+JDBC应用</span></div><div><span style="font-weight: bold;">在Servlet中可以使用JDBC技术访问数据库，常见功能：</span></div><ol><li><div>查询DB数据，然后生成显示页面，例如：列表显示功能。</div></li><li><div>接收请求参数，然后对DB操作，例如：注册、登录、修改密码等功能。</div></li></ol><div>为了方便重用和便于维护等目的，经常会采用DAO（Data Access Object）模式对数据库操作进行 独立封装。</div><div><br/></div><div>DAO工厂(工厂模式) </div><div>工厂类：封装了对象的创建细节，为调用者提供符合要求的对象。</div><div><br/></div><div><span style="font-weight: bold;">重定向的概述</span></div><div><span style="font-size: unset;"><span style="color: unset; font-family: unset; font-size: unset; font-weight: bold;">重定向的概念：</span></span> 客户浏览器发送http请求，当web服务器接受后发送302状态码响应及对应新的location给客 户浏览器，客户浏览器发现是302响应，则自动再发送一个新的http请求，请求url是新的location 地址，服务器根据此请求寻找资源并发送给客户。</div><div><span style="font-size: unset;"><span style="color: unset; font-family: unset; font-size: unset; font-weight: bold;">如何实现重定向：</span></span></div><div><span style="font-weight: bold;">实现重定向需要借助javax.servlet.http.HttpServletResponse接口中的以下方法：</span></div><ol><li><div>void sendRedirect(String location)   使用指定的重定向位置URL向客户端发送临时重定向响应</div></li></ol><div><span style="font-weight: bold;">重定向特点：</span></div><ol><li><div>重定向之后，浏览器地址栏的URL会发生改变。</div></li><li><div>重定向过程中会将前面Request对象销毁，然后创建一个新的Request对象。</div></li><li><div>重定向的URL可以是其它项目工程。</div></li></ol><div><span style="font-weight: bold;">转发的概念：</span> 一个Web组件（Servlet/JSP）将未完成的处理通过容器转交给另外一个Web组件继续处理，转发 的各个组件会共享Request和Response对象<span style="font-weight: bold;">。</span></div><div><span style="font-weight: bold;">转发的实现：</span></div><div><br/></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">绑定数据到Request对象</span></div><div><span style="font-weight: bold;">方法如下：</span></div><ol><li><div>Object getAttribute(String name)    将指定属性值作为对象返回，若给定名称属性不存 在，则返回空值</div></li><li><div>void setAttribute(String name,Object o)     在此请求中存储属性值</div></li></ol><div><span style="font-weight: bold;">2. 获取转发器对象</span></div><div><span style="font-weight: bold;">方法如下：</span></div><ol><li><div>RequestDispatcher getRequestDispatcher(String path)   返回一个RequestDispatcher对象，该对象充当位 于给定路径上的资源的包装器</div></li></ol><div><span style="font-weight: bold;">转发操作</span></div><div><span style="font-weight: bold;">方法如下：</span></div><ol><li><div>void forward(ServletRequest request, ServletResponse response)    将请求从一个servlet转发到服务器上的另一个资 源（Servlet、JSP文件或HTML文件）</div></li></ol><div><br/></div><div><span style="font-weight: bold;">转发特点：</span></div><ol><li><div>转发之后浏览器地址栏的URL不会发生改变。</div></li><li><div>转发过程中共享Request对象。</div></li><li><div>转发的URL不可以是其它项目工程。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Servlet线程安全</span></div><ol><li><div>服务器在收到请求之后，会启动一个线程来进行相应的请求处理<span style="font-weight: bold;">。</span></div></li><li><div>默认情况下，服务器为每个Servlet只创建一个对象实例。当多个请求访问同一个Servlet时，会有 多个线程访问同一个Servlet对象，此时就可能发生线程安全问题。</div></li><li><div>多线程并发逻辑，需要使用synchronized对代码加锁处理，但尽量避免使用。</div></li></ol><div><span style="font-weight: bold;">状态管理</span></div><ol><li><div>Web程序基于HTTP协议通信，而HTTP协议是”无状态”的协议，一旦服务器响应完客户的请求之 后，就断开连接，而同一个客户的下一次请求又会重新建立网络连接。</div></li><li><div>服务器程序有时是需要判断是否为同一个客户发出的请求，比如客户的多次选购商品。因此，有必 要跟踪同一个客户发出的一系列请求。</div></li><li><div>把浏览器与服务器之间多次交互作为一个整体，将多次交互所涉及的数据保存下来，即状态管理。</div></li><li><div>多次交互的数据状态可以在客户端保存，也可以在服务器端保存。状态管理主要分为以下两类：1. 客户端管理：将状态保存在客户端。基于Cookie技术实现。2. 服务器管理：将状态保存在服务器端。基于Session技术实现。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Cookie技术</span></div><div><span style="font-weight: bold;">概念：</span></div><ol><li><div>Cookie本意为”饼干“的含义，在这里表示客户端以“名-值”形式进行保存的一种技术。</div></li><li><div>浏览器向服务器发送请求时，服务器将数据以Set-Cookie消息头的方式响应给浏览器，然后浏览器 会将这些数据以文本文件的方式保存起来。</div></li><li><div>当浏览器再次访问服务器时，会将这些数据以Cookie消息头的方式发送给服务器。</div></li></ol><div><span style="font-weight: bold;">方法：</span></div><div><span style="font-size: unset; color: unset; font-family: unset;">1.使用javax.servlet.http.Cookie类的构造方法实现Cookie的创建。</span></div><ol><li><div>Cookie(String name, String value)    根据参数指定数值构造对象</div></li></ol><div>2. 使用javax.servlet.http.HttpServletResponse接口的成员方法实现Cookie的添加。</div><ol><li><div>void addCookie(Cookie cookie) 添加参数指定的对象到响应</div></li></ol><div>3. 使用javax.servlet.http.HttpServletRequest接口的成员方法实现Cookie对象的获取。</div><ol><li><div>Cookie[] getCookies() 返回此请求中包含的所有Cookie对象</div></li></ol><div>4. 使用javax.servlet.http.Cookie类的构造方法实现Cookie对象中属性的获取和修改</div><ol><li><div>String getName() 返回此Cookie对象中的名字</div></li><li><div>String getValue() 返回此Cookie对象的数值</div></li><li><div>void setValue(String newValue) 设置Cookie的数值</div></li></ol><div><br/></div><div><br/></div><div><br/></div><div><span style="font-weight: bold;">Cookie的生命周期</span></div><div><span style="font-size: unset; color: unset; font-family: unset;">1.默认情况下，浏览器会将Cookie信息保存在内存中，只要浏览器关闭，Cookie信息就会消失。</span></div><div><span style="font-size: unset; color: unset; font-family: unset;">2.如果希望关闭浏览器后Cookie信息仍有效，可以通过Cookie类的成员方法实现。</span></div><div><span style="font-size: unset;"><span style="color: unset; font-family: unset; font-size: unset; font-weight: bold;">方法如下</span></span></div><ol><li><div>int getMaxAge()   返回cookie的最长使用期限（以秒为单位）</div></li><li><div>void setMaxAge(int expiry)   设置cookie的最长保留时间（秒）</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Cookie的路径问题</span></div><div>1. 浏览器在访问服务器时，会比较Cookie的路径与请求路径是否匹配，只有匹配的Cookie才会发送 给服务器。</div><div>2. Cookie的默认路径等于添加这个Cookie信息时的组件路径，例如：/项目名/目录/add.do请求添加 了一个Cookie信息，则该Cookie的路径是 /项目名/目录。</div><div>3. 访问的请求地址必须符合Cookie的路径或者其子路径时，浏览器才会发送Cookie信息。</div><div><span style="font-weight: bold;">方法如下：</span></div><ol><li><div>void setPath(String uri) 设置cookie的路径信息</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Cookie的特点</span></div><div>Cookie技术不适合存储所有数据，程序员只用于存储少量、非敏感信息，原因如下：</div><ol><li><div>将状态数据保存在浏览器端，不安全</div></li><li><div>保存数据量有限制，大约4KB左右。</div></li><li><div>只能保存字符串信息。</div></li><li><div>可以通过浏览器设置为禁止使用。</div></li></ol><div><br/></div><div><br/></div><div><span style="font-weight: bold;">Session技术</span></div><div><span style="font-weight: bold;">概念：</span></div><ol><li><div>Session本意为&quot;会话&quot;的含义，是用来维护一个客户端和服务器关联的一种技术。</div></li><li><div>浏览器访问服务器时，服务器会为每一个浏览器都在服务器端的内存中分配一个空间，用于创建一 个Session对象，该对象有一个id属性且该值唯一，我们称为SessionId，并且服务器会将这个 SessionId以Cookie方式发送给浏览器存储。</div></li><li><div>浏览器再次访问服务器时会将SessionId发送给服务器，服务器可以依据SessionId查找相对应的 Session对象</div></li></ol><div><span style="font-weight: bold;">方法：</span></div><div>1. 使用javax.servlet.http.HttpServletRequest接口的成员方法实现Session的获取。</div><ol><li><div>HttpSession getSession()     返回此请求关联的当前Session，若此请求没有则创建一个</div></li></ol><div>2. 使用javax.servlet.http.HttpSession接口的成员方法实现判断和获取。</div><ol><li><div>boolean isNew()    判断是否为新创建的Session</div></li><li><div>String getId() 获取Session的编号</div></li></ol><div>3. 使用javax.servlet.http.HttpSession接口的成员方法实现属性的管理。</div><ol><li><div>Object getAttribute(String name)      返回在此会话中用指定名称绑定的对象，如果没有对象在 该名称下绑定，则返回空值</div></li><li><div>void setAttribute(String name, Object value)   使用指定的名称将对象绑定到此会话</div></li><li><div>void removeAttribute(String name)    从此会话中删除与指定名称绑定的对象</div></li></ol><div><br/></div><div><span style="font-weight: bold;">Session的生命周期</span></div><div>1. 为了节省服务器内存空间资源，服务器会将空闲时间过长的Session对象自动清除掉，服务器默认 的超时限制一般是30分钟。</div><div>2. 使用javax.servlet.http.HttpSession接口的成员方法实现失效实现的获取和设置。</div><div><span style="font-weight: bold;">方法如下</span></div><ol><li><div>int getMaxInactiveInterval()    获取失效时间</div></li><li><div>void setMaxInactiveInterval(int interval) 设置失效时间</div></li></ol><div><span style="font-weight: bold;">注意：</span> <span style="font-weight: bold;">可以配置web.xml文件修改失效时间。</span></div><div><span style="font-weight: bold;">&lt;session-config&gt;</span></div><div><span style="font-weight: bold;">        &lt;session-timeout&gt;?&lt;</span><span style="font-weight: bold;">session-timeout</span><span style="font-weight: bold;">&gt;</span></div><div><span style="font-weight: bold;">&lt;</span> <span style="font-weight: bold;">/session-config</span> <span style="font-weight: bold;">&gt;</span></div><div><br/></div><div><span style="font-weight: bold;">Session的特点:</span></div><ol><li><div>数据比较安全。</div></li><li><div>能够保存的数据类型丰富，而Cookie只能保存字符串。</div></li><li><div>能够保存更多的数据，而Cookie大约保存4KB。</div></li><li><div>数据保存在服务器端会占用服务器的内存空间，如果存储信息过多、用户量过大，会严重影响服务 器的性能。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">JSP核心技术</span></div><div><br/></div><div><span style="font-weight: bold;">JSP的概念:</span></div><ol><li><div>JSP是Java Server Pages的简称，跟Servlet一样可以动态生成HTML响应， JSP文件命名为 xxx.jsp。</div></li><li><div>与Servlet不同，JSP文件以HTML标记为主，然后内嵌Java代码段，用于处理动态内容。</div></li></ol><div><span style="font-weight: bold;">JSP的语法:</span></div><div><span style="font-weight: bold;">JSP语法结构:</span></div><ol><li><div>声明区</div></li><li><div>程序代码区</div></li><li><div>表达式</div></li><li><div>注释</div></li><li><div>指令和动作</div></li><li><div>内置对象</div></li></ol><div><span style="font-weight: bold;">声明区：</span></div><ol><li><div>基本语法：&lt;%!%&gt;</div></li><li><div>说明：可以定义全局变量、方法、类。</div></li></ol><div><span style="font-weight: bold;">程序代码区:</span></div><ol><li><div>基本语法：&lt;%程序代码区%&gt;</div></li><li><div>说明：可以定义局部变量以及放入任何的Java程序代码</div></li></ol><div><br/></div><div><span style="font-weight: bold;">表达式：</span></div><ol><li><div>基本语法：&lt;%=%&gt;</div></li><li><div>说明：可以输出一个变量或一个具体内容，但=后面必须是字符串变量或者可以被转换成字符串的 表达式。</div></li><li><div>注意：不需要以;结束，只有一行</div></li></ol><div><br/></div><div><span style="font-weight: bold;">指令和动作</span></div><ol><li><div>指令格式：&lt;%@ 指令 属性=“属性值”%&gt;</div></li><li><div>指令的属性可以设定多个。</div></li><li><div>JSP常用指令有：page、taglib、include。</div></li></ol><div><span style="font-weight: bold;">page指令：</span></div><div><span style="font-weight: bold;">page指令用于导包和设置一些页面属性，常用属性如下：</span></div><ol><li><div>import 导入相应的包，惟一允许在同一文档中多次出现的属性</div></li><li><div>contentType 设置Content-Type响应报头，标明即将发送到浏览器的文档类型</div></li><li><div>pageEncoding 设置页面的编码</div></li><li><div>language 指定页面使用的语言</div></li><li><div>session 控制页面是否参与HTTP会话</div></li><li><div>errorPage 处理当前页面中抛出但未被捕获的任何异常</div></li><li><div>isErrorPage 当前页是否可以作为其他页面的错误处理页面</div></li></ol><div><br/></div><div><span style="font-weight: bold;">taglib指令：</span> taglib指令用来扩展JSP程序的标签元素，引入其他功能的标签库文件。</div><div><br/></div><div><span style="font-weight: bold;">include指令：</span></div><ol><li><div>include指令用于引入另一个JSP程序或HTML文件等。   格式：&lt;%@ include file=“被包含的文件地址 %&gt;</div></li><li><div>JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来，然后开始执行转换及编译的工 作。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">jsp:include/jsp:param</span></div><ol><li><div>jsp:include动作用于引入另一个JSP程序或HTML文件等。</div></li><li><div>执行到include时，被include的文件才会被编译。</div></li><li><div>如果include的是jsp文件，那它不会被转换成Servlet文件。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">include指令和include动作的区别</span></div><ol><li><div>include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行（静态包含）。</div></li><li><div>include动作在转换时期是不会被编译的，只有在客户端请求时期被执行到才会被动态的编译载入 （动态包含,推荐）。</div></li></ol><div><span style="font-weight: bold;">jsp:forward/jsp:param:</span> forward动作用于在JSP中实现转发，将请求转发到另一个指定的JSP程序或者Servlet中处理。</div><div><span style="font-weight: bold;">JSP内置对象:</span></div><div><span style="font-weight: bold;">该奶奶：</span></div><ol><li><div>在JSP程序中有9个内置对象由容器为用户进行实例化，程序员可以不用定义就直接使用这些变量。</div></li><li><div>在JSP转换成Servlet后，会自动追加这些变量的定义，使用内置对象可以简化JSP的开发。</div></li></ol><div><br/></div><div><span style="font-weight: bold;">对象名称</span>：</div><div><span style="font-weight: bold;">        对象变量                 对象类型                               作用</span></div><ol><li><div>out                    JSPWriter                              输出流</div></li><li><div>request             HttpServletRequest              请求信息</div></li><li><div>response           HttpServletResponse            响应信息</div></li><li><div>session              HttpSession                          会话</div></li><li><div>application        ServletContext                     全局的上下文对象</div></li><li><div>pageContext     PageContext                        JSP页面上下文</div></li><li><div>page                  Object                                  JSP页面本身</div></li><li><div>config                ServletConfig                      Servlet配置对象</div></li><li><div>exception          Throwable                          捕获网页异常</div></li></ol><div><br/></div><div><span style="font-weight: bold;">out内置对象</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">out内置对象是一个缓冲的输出流，用来给客户端输出信息。</span></div><div><span style="font-weight: bold;">2.常用方法:</span></div><ol><li><div>void println(String x) 向客户端输出各种类型数据</div></li><li><div>void newLine() 输出一个换行符</div></li><li><div>void close() 关闭输出流</div></li><li><div>int getBufferSize() 返回缓冲区的大小</div></li><li><div>int getRemaining() 返回缓冲区中未使用的字节数</div></li><li><div>void flush() 输出缓冲区里的数据</div></li><li><div>void clearBuffer() 清除缓冲区里的数据，同时把数据输出到客户端</div></li><li><div>void clear() 清除缓冲区里的数据，但不把数据输出到客户端</div></li></ol><div><br/></div><div><span style="font-weight: bold;">request内置对象</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">request对象封装的是调用JSP页面的请求信息，它是HttpServletRequest接口的一个实例。</span></div><div><span style="font-weight: bold;">2.</span> <span style="font-weight: bold;">该对象的属性值只在一个请求中保存。</span></div><div><span style="font-weight: bold;">2.乘用方法：</span></div><ol><li><div>String getMethod()            返回客户端向服务器端传送数据的方式</div></li><li><div>String getParameter(String name)              返回客户端向服务器端传送的参数值</div></li><li><div>String[] getParameterValues( String name)            获得指定参数的所有值</div></li><li><div>String getRequestURI()          获得请求地址</div></li><li><div>String getRemoteAddr()            返回发送请求的客户端或最后一个代理的IP地址</div></li><li><div>int getRemotePort()            返回发送请求的客户端或最后一个代理的端口号</div></li><li><div>String getServerName()             获取服务器的名字</div></li><li><div>int getServerPort()                获取服务器端的端口</div></li><li><div>void setAttribute(String name,Object o)            在此请求中存储属性。属性在请求之间重置</div></li><li><div>Object getAttribute(String name)                 将指定属性的值作为对象返回，若不存在则返回空值</div></li></ol><div><br/></div><div><br/></div><div><span style="font-weight: bold;">response内置对象：</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">response对象用于给客户端相应输出处理结果，它是HttpServletResponse接口的一个实例</span></div><div><span style="font-weight: bold;">2.</span> <span style="font-weight: bold;">经常用于设置HTTP标题，添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码 URL。</span></div><div><span style="font-weight: bold;">3.常用方法：</span></div><ol><li><div>void addCookie(Cookie cookie) 添加一个Cookie对象，用于在客户端保存特定的信 息</div></li><li><div>void addHeader(String name, String value) 添加HTTP头信息，该Header信息将发送到客户端</div></li><li><div>boolean containsHeader(String name) 判断指定名字的HTTP文件头是否存在</div></li><li><div>void sendRedirect(String location) 重定向JSP文件</div></li><li><div>void setContentType(String type) 设置类型与编码方式</div></li></ol><div><span style="font-weight: bold;">session内置对象</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">session对象表示浏览器和服务器之间的一次会话，一次会话可以包含多次请求，在多次请求之间 可以借助session对象存储信息，它是HttpSession类型的一个实例。</span></div><div><span style="font-weight: bold;">2.</span> <span style="font-weight: bold;">该对象的属性值在一次会话范围中保存，保存在服务器端，只要不关闭浏览器，默认半个小时内都 可以访问。</span></div><div><span style="font-weight: bold;">3.常用方法：</span></div><ol><li><div>void setAttribute(String name, Object value)            使用指定的名称将对象绑定到此会话</div></li><li><div>Object getAttribute(String name)                     返回在此会话中用指定名称绑定的对象，如果没有对象在该 名称下绑定则返回空值</div></li></ol><div><br/></div><div><br/></div><div><span style="font-weight: bold;">application内置对象</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">application对象是一个web程序的全局变量，它是ServletContext类型的一个实例。</span></div><div><span style="font-weight: bold;">2.</span> <span style="font-weight: bold;">在整个服务器上保存数据，所有用户共享。</span></div><div><span style="font-weight: bold;">3.常用方法：</span></div><ol><li><div>void setAttribute(String name, Object object)           将对象绑定到此servlet上下文中的给定属性名</div></li><li><div>Object getAttribute(String name)                   返回给定名称的servlet容器属性，若没有该名称的属 性返回null</div></li></ol><div><br/></div><div><br/></div><div><span style="font-weight: bold;">pageContext内置对象：</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">pageContext对象是PageContext类型的对象，可以使用这个对象来管理其他的隐含对象</span></div><div><span style="font-weight: bold; color: unset; font-family: unset; font-size: unset;">2.只在一个页面中保存数据。</span></div><div><span style="font-weight: bold;">常用方法：</span></div><ol><li><div>void setAttribute(String name, Object value, int scope)             使用适当的作用域设置指定的名称和值</div></li><li><div>Object getAttribute(String name, int scope)                      返回指定作用域中名称关联的对象，若找不到 则返回null</div></li><li><div>ServletRequest getRequest()                   获取请求对象</div></li><li><div>ServletResponse getResponse()                     获取响应对象</div></li><li><div>HttpSession getSession()                       获取会话对象</div></li><li><div>ServletConfig getServletConfig()                     获取配置对象</div></li><li><div>JspWriter getOut()                            获取输出对象</div></li><li><div>Object getPage()                     获取页面对象</div></li><li><div>Exception getException()                       获取异常对象</div></li></ol><div><br/></div><div><br/></div><div><span style="font-weight: bold;">exception内置对象</span></div><div><span style="font-weight: bold;">1.</span> <span style="font-weight: bold;">exception 对象是Throwable的实例，表示的是JSP的异常信息。</span></div><div><span style="font-weight: bold;">2.</span> <span style="font-weight: bold;">如果要使用它，必须将对应页面page指令的isErrorPage属性设置成true。</span></div><div><span style="font-weight: bold;">3.</span> <span style="font-weight: bold;">单个页面的处理方式</span></div><div><br/></div><div><span style="font-weight: bold; font-size: 14pt;">MVC设计模式:</span></div><div><span style="font-weight: bold; font-size: 10pt;">概念：</span></div><ol><li><div>MVC是模型(Model)和视图(View)以及控制器(Controller)的简写，是一种将数据、界面显示和业务 逻辑进行分离的组织方式，这样在改进界面及用户交互时，不需要重新编写业务逻辑，从而提高了 代码的可维护性。</div></li><li><div>M：主要用于封装业务数据的JavaBean(Bean) 和 业务逻辑的JavaBean(Service)及访问数据库的 DAO对象。</div></li><li><div>V：主要负责数据收集 和 数据展现，通常由JSP文件完成。</div></li><li><div>C：主要负责流程控制 和 页面跳转，通常由Servlet完成。</div></li></ol><div><span style="font-weight: bold;">基本模型：</span></div><div><span style="font-weight: bold;"><img src="Servlet核心技术上_files/Image.png" type="image/png" data-filename="Image.png"/></span></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><span style="font-size: unset; color: unset; font-family: unset;">（乱码原因）编码方式跟解码方式不一样</span></div><div>ServletResponse接口和HttpServletResponse接口的主要作用：服务器发送给客户端进行响应的相关的数据或者信息的打包</div><div>服务器向客户端（浏览器）发送数据内容叫响应</div><div>客户端（浏览器）向服务器发送数据内容叫请求</div><div><span style="background-color: rgb(43, 43, 43); font-size: 13.5pt; color: rgb(169, 183, 198); font-family: Consolas;">servletConfig的作用：获取别名 参数化信息 获取</span><span style="background-color: rgb(43, 43, 43); font-size: 13.5pt; color: rgb(106, 135, 89); font-family: Consolas;">getServletContext</span><span style="background-color: rgb(43, 43, 43); font-size: 13.5pt; color: rgb(106, 135, 89); font-family: &quot;Arial Unicode MS&quot;;">引用</span><span style="background-color: rgb(43, 43, 43); font-size: 13.5pt; color: rgb(169, 183, 198); font-family: Consolas;">接口的引用</span></div><div><br/></div><div>DAO:数据访问对象进行处理</div><div>cookie:保存或者说进行状态管理的一种保存在客户端的一种技术</div><div><br/></div><div>include指令 （静态包含）：先包含（引入）在编译</div><div>include动作 （动态包含）：先编译完在包含（引入）</div><div>设置完request对象里属性后 只在该请求好使 但可以本地直接获取或者服务器内部跳转到别的jsp （必须确保是同一个请求）</div><div><br/></div><div>param:为了跟前端传过来的参数值进行匹配</div><div>接口里面的方法是抽象方法</div><div><br/></div></div><div><br/></div></span>
</div></body></html> 